package pers.mobian.aop;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @Date 2021/10/10 19:47
 * @Created mobian
 * @Description
 */
public class JdkTest {
	public static void main(String[] args) {

		// 实例化出需要被功能增强的代理对象
		UserService service = new UserServiceImpl();

		// 参数：类加载器、被代理的接口数组、handler处理器
		UserService instance = (UserService) Proxy.newProxyInstance(UserService.class.getClassLoader(), new Class[]{UserService.class}, new InvocationHandler() {
			// 对应的增强处理逻辑逻辑
			@Override
			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

				System.out.println("增强逻辑开始部分。。");
				// 调用被代理的对象的方法,即对应后面的instance.show()操作
				// 方法.invoke(目标对象， 参数)
				Object result = method.invoke(service, args);
				System.out.println("增强逻辑结束部分。。");
				return result;
			}
		});

		// 调用方法,此时会进入代理逻辑,即进入invoke方法
		instance.show();
	}

	public void test(){

		UserServiceImpl userService = new UserServiceImpl();

		UserServiceImpl newInstance = (UserServiceImpl) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[]{UserService.class}, new InvocationHandler() {
			@Override
			public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
				Object invoke = method.invoke(userService, args);
				System.out.println("--0-");
				return invoke;
			}
		});

		newInstance.show();

	}
}
